package org.uma.kri.nyu.mor.almas;

import java.util.ArrayList;
import java.util.List;

import org.uma.kri.nyu.mor.almas.entity.Contacts;
import org.uma.kri.nyu.mor.almas.entity.Email;
import org.uma.kri.nyu.mor.almas.entity.Group;
import org.uma.kri.nyu.mor.almas.entity.Phone;
import org.uma.kri.nyu.mor.almas.util.ContactsUtil;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

/**
 * 検索表示フラグメント
 */
public class ListSearchFragment extends Fragment {
	
	private static final String TAG = "ListSearchFragment";
	private ListView pList;
	
	public ListSearchFragment() {
		// Required empty public constructor
	}
	
	/***
	 * Activityに関連付けされた際に一度だけ呼び出される
	 */
	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		Log.d(TAG, "onAttach");
	}
	
	/***
	 * Fragmentの初期化処理を行う
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.d(TAG, "onCreate");
	}
	
	/***
	 * FragmentのView階層を生成し戻り値として返す
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		Log.d(TAG, "onCreateView");
		return inflater.inflate(R.layout.fragment_list_search, container, false);
	}
	
	/***
	 * 親となるActivityの「onCreate」の終了を知らせる
	 */
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		Log.d(TAG, "onActivityCreated");

	    if(null == savedInstanceState){
			//先生の教え！
			View v = this.getView();		
			
	        //Fragmentのライフサイクルは継承元のActivityの影響を常に受ける。
			//Fragmentが関連付いているActivityのonCreate()が呼ばれた直後に呼び出される。
			//ListView にAdapter を セットするなどの時は、Viewが作成された後でなければならないのでこのメソッドで行う。

			//【ここで表示データの設定】
			//アカウント名はどうやって取得するのだろう？
			ArrayList<Contacts> ListDetailList = ContactsUtil.getContactsList("");
			
			Email Email = new Email();
			Group Group = new Group();
			Phone Phone = new Phone();
			
			//適当に値を設定
			Email.id = 0;
			Email.mailAdress = "mogemogedrill@degi.co.jp";
			Email.mailAdressType = "会社用";
			Group.id = 0;
			Group.groupId = "0";
			Group.groupName = "でじもん";
			Phone.id = 0;
			Phone.phoneNo = "1234567890A";
			Phone.phoneNoType = "携帯電話";
			
			for(int i = 0; i < 100; i++){
				Contacts Contacts = new Contacts();
				Contacts.displayName = "どりもげもん";
				Contacts.groupList.add(Group);
				Contacts.phoneNoList.add(Phone);
				Contacts.mailAdressList.add(Email);
				ListDetailList.add(Contacts);
			}
			
			//テスト用
			//ArrayList<ListDetail> ListDetailList = new ArrayList<ListDetail>();
			//for(int i = 0; i < 100; i++){
			//	ListDetail ListDetail = new ListDetail();
			//	ListDetail.listid = i;
			//	ListDetail.image = "";
			//	ListDetail.username = "どりもげもん";
			//	ListDetail.gruop = "でじもん";
			//	ListDetail.address = "つちのなか";
			//	ListDetail.telno = "XXX-XXXX-XXXX";		
			//	ListDetailList.add(ListDetail);
			//}
		
			pList = (ListView)v.findViewById(R.id.ListDetail);		
			pList.setAdapter(new ListAdapter(getActivity(),ListDetailList));
/*			pList.setOnItemClickListener(new OnItemClickListener() {
	            @Override
	            public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
	    			// 詳細画面インテント生成
	    			Intent intent = new Intent(getActivity(), DetailEditFragment.class);
	    			// 選択位置を渡す
	    			intent.putExtra("SELECT", position);
	    			// アクティビティスタート
	    			startActivity(intent);
	            }
	        });*/
			
			// リストビューにリストアイテムクリックリスナーをセット
			pList.setOnItemClickListener(new ListItemClickListener());	
			
	    }		
	}

	// リストビューアイテムクリックリスナー
	class ListItemClickListener implements OnItemClickListener {

		// アイテムクリックメソッド
		public void onItemClick(AdapterView<?> parent, View view, int id, long position) {

			// 連絡先表示アクティビティクラスのインテント生成
			Intent intent = new Intent(getActivity(), SubActivity.class);
            ListView listView = (ListView) parent;
            Contacts item = (Contacts) listView.getItemAtPosition((int)position);
			
			// 選択位置を渡す
			//intent.putExtra("SELECT", position);
			intent.putExtra("SELECT", item);
			
			// アクティビティスタート
			startActivity(intent);

		}
	}	
	
	/***
	 * Activityの「onStart」に基づき開始される
	 */
	@Override
	public void onStart() {
		super.onStart();
		Log.d(TAG, "onStart");
	}
	
	/***
	 * Activityの「onResume」に基づき開始される
	 */
	@Override
	public void onResume() {
		super.onResume();
		Log.d(TAG, "onResume");
	}
	
	/***
	 * Activityが「onPause」になった場合や、Fragmentが変更更新されて操作を受け付けなくなった場合に呼び出される
	 */
	@Override
	public void onPause() {
		super.onPause();
		Log.d(TAG, "onPause");
	}
	
	/***
	 * フォアグラウンドでなくなった場合に呼び出される
	 */
	@Override
	public void onStop() {
		super.onStop();
		Log.d(TAG, "onStop");
	}
	
	/***
	 * Fragmentの内部のViewリソースの整理を行う
	 */
	@Override
	public void onDestroyView() {
		super.onDestroyView();
		Log.d(TAG, "onDestroyView");
	}
	
	/***
	 * Fragmentが破棄される時、最後に呼び出される
	 */
	@Override
	public void onDestroy() {
		super.onDestroy();
		Log.d(TAG, "onDestroy");
	}
	
	/***
	 * Activityの関連付けから外された時に呼び出される
	 */
	@Override
	public void onDetach() {
		super.onDetach();
		Log.d(TAG, "onDetach");
	}

//	private class ListAdapter extends ArrayAdapter<ListDetail> {
	private class ListAdapter extends ArrayAdapter<Contacts> {
		
		private Context mContext;
		private LayoutInflater mInflater;
		
		/**
		 * コンストラクタ 
		 * @param context
		 * @param textViewResourceId
		 * @param objects
		 */
//		public ListAdapter(Context context, List<ListDetail> objects) {
		public ListAdapter(Context context, List<Contacts> objects) {
			super(context, 0, objects);
			mContext = context;
			mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}
		
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			View view;
			Bitmap bmp;
			
			if (convertView == null) {
				view = mInflater.inflate(R.layout.list_control, parent, false);
			} else {
				view = convertView;
			}
			
//			ImageView image = (ImageView)view.findViewById(R.id.imageViewUser);
			TextView group = (TextView)view.findViewById(R.id.dispControl2);
			TextView username = (TextView)view.findViewById(R.id.dispControl1);
			TextView Tel = (TextView)view.findViewById(R.id.dispControl3);
			TextView Adr = (TextView)view.findViewById(R.id.dispControl4);
			
			//ListDetail item = getItem(position);
			Contacts item = getItem(position);
						
//画像はとりあえずコメント
//			//画像なしの場合、デフォルト画像をリソースより表示
//			if (item.image== null) {
//				//■ リソースから画像設定（サイズによっては[out of memory]エラーとなる）
//				Resources r = getResources();
//				bmp = BitmapFactory.decodeResource(r, R.drawable.kuma);				
//			}else{
//				//■ パスから画像設定
//				//画像自体は読み込まず、画像サイズなどのみを読み込む
//				BitmapFactory.Options options = new BitmapFactory.Options();
//				options.inJustDecodeBounds = true;
//				BitmapFactory.decodeFile(item.image, options);
//				 
//				//読み込むスケールを計算する
//				int scaleW = options.outWidth / 50+1;
//				int scaleH = options.outHeight / 50+1;
//				options.inSampleSize = Math.max(scaleW, scaleH);
//				 
//				//計算したスケールで画像を読み込む
//				options.inJustDecodeBounds = false;
//				bmp = BitmapFactory.decodeFile(item.image, options);
//			}

//			image.setImageBitmap(bmp);
//			username.setText(item.username);
//			group.setText(item.gruop);

			//連絡先リストよりListViewへ設定
			username.setText(item.displayName.toString());
			if(item.groupList.size() > 0){
				group.setText(item.groupList.get(0).groupName);
			}
			if(item.phoneNoList.size() > 0){
				Tel.setText(item.phoneNoList.get(0).phoneNo);
			}
			if(item.mailAdressList.size() > 0){
				Adr.setText(item.mailAdressList.get(0).mailAdress);
			}	

			return view;
		}
	}
}
